package com.teach.util;

import java.util.List;
import java.util.Map;

import com.teach.R;

/**<pre>
 * JSON处理工具类
 * Class: com.teach.util.JsonUtil
 * Copyright 2022 jlzhou.top Inc. All rights reserved.
 * Warning: this content is only for internal circulation of the company.
 *          It is forbidden to divulge it or use it for other commercial purposes.
 * </pre>
 * @author J.L.Zhou
 * @since 2022年10月22日 下午1:54:47
 * @version 1.0
 */
public interface JsonUtil {

  /**
   * 将对象转换成JSON字符串
   * @param obj 需要转换的对象
   * @return 字符串
   */
  String toString(Object obj);

  /**
   * 将对象转换成美化的JSON字符串
   * @param obj 需要转换的对象
   * @return 字符串
   */
  String toPrettyString(Object obj);

  /**
   * 将JSONString装换成JavaBean
   * @param <E> JavaBean的类型
   * @param str JSONString
   * @param cls JavaBean的类型Clazz
   * @return JavaBean对象
   */
  <E> E toBean(String str,Class<E> cls);

  /**
   * 将JSONArrayString装换成JavaBean列表
   * @param <E> JavaBean的类型
   * @param str JSONArrayString
   * @param cls JavaBean的类型Clazz
   * @return JavaBean对象列表
   */
  <E> List<E> toList(String str,Class<E> cls);

  /**
   * 将JSONString装换成Map对象
   * @param <K> Map的key类型
   * @param <V> Map的value类型
   * @param str JSONString
   * @param keyClass Map的key类型Clazz
   * @param valueClass Map的value类型Clazz
   * @return Map对象
   */
  <K,V> Map<K,V> toMap(String str,Class<K> keyClass,Class<V> valueClass);

  /**
   * 将JSONString转换成统一结果返回类型R<T>
   * @param <T> R类型
   * @param str JSONString
   * @param cls R对象的泛型类型Clazz
   * @return 统一结果返回类型R<T>对象
   */
  <T> R<T> toR(String str,Class<T> cls);
}
